<?php

class disparaEmailsTask extends sfBaseTask
{
  protected function configure()
  {
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name','camaras'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
      new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
      // add your own options here
    ));

    $this->namespace        = 'camaras';
    $this->name             = 'dispara-emails';
    $this->briefDescription = 'Convida envolvidos e lembra prazos ao secretario';
    $this->detailedDescription = <<<EOF
 Dispara e-mails conforme regras estipuladas em config/app.yml
 E acionado pelo comando:

  [php symfony camaras dispara-emails|INFO]
EOF;
  }

  protected function execute($arguments = array(), $options = array())
  {
    // initialize the database connection
    $databaseManager = new sfDatabaseManager($this->configuration);
    $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
    
	$this->convidarParaEvento_list = Doctrine::getTable('Evento')
      ->createQuery('a')
	  ->Where('ic_confirmado = 1')
	  ->addWhere('dt_hr_inicio > ?', date("Y-m-d H:i:s",strtotime((sfConfig::get('app_mail_convidar_em_d_menos')).' day')))
	  ->addWhere('dt_hr_inicio < ?', date("Y-m-d H:i:s",strtotime((sfConfig::get('app_mail_convidar_em_d_menos')+1).' day')))
      ->execute()
	;
	
	$number_not_sent = 0;
	$number_sent = 0;
	foreach ($this->convidarParaEvento_list as $i => $evento) {
		
	  /**
	   * calcula data limite para sugestão de pauta
	   */
	  $dia = date('d' ,strtotime($evento->dt_hr_termino));
	  $mes = date('m' ,strtotime($evento->dt_hr_termino));
	  $ano = date('Y' ,strtotime($evento->dt_hr_termino));
	  $data_anterior = mktime(0, 0, 0, $mes, $dia - sfConfig::get('app_mail_sugestao_pauta_ate_d_menos'), $ano);

  	  $corpoDoEmail = "dia <strong> ".date('d-m-Y' ,strtotime($evento->dt_hr_inicio))." </strong> <br /> 
					   de <strong> ".date('H:i' ,strtotime($evento->dt_hr_inicio))." </strong> 
					   às <strong> ".date('H:i' ,strtotime($evento->dt_hr_termino))." </strong> <br />
					   no <strong> $evento->de_endereco, $evento->Cidade </strong> <br /><br />
					   
					   Participe enviando sugestões de temas para a pauta:
					   <ul>
					     <li> até dia <strong>". date('d-m-Y' ,$data_anterior) ."</strong></li>
					     <li> para <strong>".$evento->Camara->Usuario." (".$evento->Camara->Usuario->no_email.")</strong></li>
					   </ul> <br />
					   
					   <strong>Atenciosamente,</strong> <br />
					   ".sfConfig::get('app_cliente')." <br/>
					   ".sfConfig::get('app_orgao');
	  try {
		// Cria a mensagem e o objeto que irá enviar os emails
		$mailer = new Swift(new Swift_Connection_SMTP(sfConfig::get('app_mail_smtp_server')));
		$mensagem = new Swift_Message("Faltam ".sfConfig::get('app_mail_convidar_em_d_menos')." dias para a $evento->TipoEvento $evento->nr_evento - ".$evento->Camara, $corpoDoEmail, 'text/html');
		
		/**
		 * Se status FALSE só envia ao desenvolvedor ( TRUE só em produção )
		 */ 
		if (sfConfig::get('app_mail_status')) {
		  /**
		   * prepara lista de e-mails
		   */
		  $qe = Doctrine_Query::create()
			->from('UsrEvento ue')
		    ->Where('cd_evento = ?',$evento->cd_evento)
		  ;
		  $convidado_list = $qe->execute();
		  
		  $recipients = new Swift_RecipientList();
		  $recipients->flush();
		  foreach ($convidado_list as $i => $convidado) {
		    $recipients->addTo($convidado->Usuario->no_email, $convidado->Usuario->name);
		  }
		  $recipients->addCc($evento->Camara->Usuario->no_email, $evento->Camara->Usuario->TipoUsuario);
		  
		  if (sfConfig::get('app_mail_monitorando')) {
		    $recipients->addTo(sfConfig::get('app_mail_desenvolvedor'), sfConfig::get('app_desenvolvedor'));
		  }
		  
	      $number_sent += $mailer->send($mensagem, $recipients, new Swift_Address(sfConfig::get('app_mail_remetente'), sfConfig::get('app_cliente')));

		} else {
		  $number_sent += $mailer->send($mensagem, sfConfig::get('app_mail_desenvolvedor'), new Swift_Address(sfConfig::get('app_mail_remetente'), sfConfig::get('app_cliente')));
		}
		
		$mailer->disconnect();
		  
	  } catch (Exception $e) {
		$number_not_sent++;
		$mailer->disconnect();
	  }
	}

    // add your code here
    $this->logSection('number_sent', $number_sent);
    $this->logSection('number_erros', $number_not_sent);
    $this->logSection('monitorando', sfConfig::get('app_mail_monitorando'));
  }
}
